package tianhao.luo.tree;

/**
 * 顺序存储二叉树
 *
 * @author: tianhao.luo@hand-china.com 2021/6/23  下午9:27
 */
public class ArrayBinaryTree {
    private int[] array;

    public ArrayBinaryTree(int[] array) {
        this.array = array;
    }


    /**
     * 输出数组对应二叉树的前序遍历
     *
     * @param index 根节点索引
     */
    public void preOrder(int index) {
        if (array == null || array.length == 0) {
            System.out.println("空数组");
            return;
        }

        // 输出当前结点
        System.out.print(array[index]+"\t");
        // 输出左子树
        if (index * 2 + 1 < array.length) {
            preOrder(index * 2 + 1);
        }

        // 输出右子树
        if (index * 2 + 2 < array.length) {
            preOrder(index * 2 + 2);
        }
    }

    /**
     * 输出数组对应二叉树的中序遍历
     *
     * @param index 根节点索引
     */
    public void infixOrder(int index) {
        if (array == null || array.length == 0) {
            System.out.println("空数组");
            return;
        }


        // 输出左子树
        if (index * 2 + 1 < array.length) {
            infixOrder(index * 2 + 1);
        }
        // 输出当前结点
        System.out.print(array[index]+"\t");

        // 输出右子树
        if (index * 2 + 2 < array.length) {
            infixOrder(index * 2 + 2);
        }
    }


    /**
     * 输出数组对应二叉树的后序遍历
     *
     * @param index 根节点索引
     */
    public void postOrder(int index) {
        if (array == null || array.length == 0) {
            System.out.println("空数组");
            return;
        }

        // 输出左子树
        if (index * 2 + 1 < array.length) {
            postOrder(index * 2 + 1);
        }

        // 输出右子树
        if (index * 2 + 2 < array.length) {
            postOrder(index * 2 + 2);
        }

        // 输出当前结点
        System.out.print(array[index]+"\t");
    }

}
